home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / midi / gfft.lha / gfft-2.03 / source / gfft-2.03-source.lha / okfft.c < prev    next >
C/C++ Source or Header  |  1996-01-02  |  2KB  |  69 lines

  1. /***************************************************************************
  2.  *          Copyright (C) 1994  Charles P. Peterson                  *
  3.  *         4007 Enchanted Sun, San Antonio, Texas 78244-1254             *
  4.  *              Email: Charles_P_Peterson@fcircus.sat.tx.us                *
  5.  *                                                                         *
  6.  *          This is free software with NO WARRANTY.                  *
  7.  *          See gfft.c, or run program itself, for details.              *
  8.  *              Support is available for a fee.                      *
  9.  ***************************************************************************
  10.  *
  11.  * Program:     gfft--General FFT analysis
  12.  * File:        ok.c
  13.  * Purpose:     OK! Do an ordinary fft analysis
  14.  * Author:      Charles Peterson (CPP)
  15.  * History:     1-September-1993 CPP; Created.
  16.  * Comment:
  17.  */
  18.  
  19. #include "gfft.h"
  20. #include "settings.h"
  21.  
  22. ULONG ok_fft (BOOLEAN do_it_for_real)
  23. {
  24.     unsigned long data_count;
  25.     unsigned long data_number;
  26.     unsigned long next_power;
  27.     float *indata;
  28.  
  29.     data_count = ok_read (NULL, 0L);
  30.     next_power = get_pos_power_2 (data_count);
  31.     if (data_count != next_power)
  32.     {
  33.     if (Pad)
  34.     {
  35.         data_number = next_power;
  36.     }
  37.     else
  38.     {
  39.         data_number = next_power / 2;
  40.         error_message (IGNORING_TAILEND);
  41.     }
  42.     }
  43.     else
  44.     {
  45.     data_number = data_count;
  46.     }
  47.  
  48.     if (!do_it_for_real) return data_number;
  49.  
  50.     indata = gmalloc (data_number * sizeof(float), NOTHING_SPECIAL);
  51.  
  52.     data_count = ok_read (indata, data_number);
  53.     if (data_count != data_number)
  54.     {
  55.     unsigned long i;
  56.     error_message (PADDING_TAILEND);
  57.     for (i = data_count; i < data_number; i++)
  58.     {
  59.         indata[i] = 0.0;
  60.     }
  61.     }
  62.  
  63.     ok_rfft (indata, data_number);
  64.     ok_writec (indata, data_number);
  65.     gfree (indata);
  66.  
  67.     return data_number;
  68. }
  69.